package com.qf.day09;

import com.qf.day08.homework.fight.Hero;

/**
 * 介绍String类
 * 面试题：String类中的方法 intern的作用是什么（工作原理是什么？）
 * String s1 = "hello";
 * String s2 = s1.intern();
 * (1) 从"字符串常量池"中寻找是否已经存在相同的字符串对象 ;
 * "字符串常量池"相当于一个字符串的数组，在jvm内存中。
 * 寻找是否已经存在 "hello" 字符串对象
 * (2) 如果存在，则直接返回常量池中的这个字符串对象。
 * (3) 如果不存在，则先把这个字符串对象添加到常量池中，然后在返回这个字符串对象
 *
 * 注意：最常使用的String的赋值方式底层的逻辑是什么？
 * String s1 = "hello";
 * jvm在执行上面的代码时，相当于调用了 "hello".intern()方法
 */
public class StringDemo {

    @Override
    public String toString() {
        return  "~~~~~~StringDemo~~~~~";
    }

    public static void main(String[] args) {

//        int number = -123;
//        String formatted = String.format("%+10d", number);
//        System.out.println(formatted);  // 输出：      -123（前面有 7 个空格）


//        double pi = 3.141592653589793;
//        String formatted = String.format("Pi is approximately %.3f.", pi);
//        System.out.println(formatted);  // 输出：Pi is approximately 3.14.


//        String s1 = "Alice";
//        String s2 = "Monday";
//        String s3 = "Hi";
////        System.out.println("Hello, "+s1+"! Today is "+s2+". ~~~ "+s3+"~~~~~");
//        String formatted = String.format("Hello, %s! Today is %s. ~~~ %s~~~~~", s1,s2,s3 );
//        System.out.println(formatted);  // 输出：Hello, Alice! Today is Monday.

//        Hero hero = new Hero();
//        String s = String.valueOf(hero);
//        System.out.println(s);

//        StringDemo stringDemo = new StringDemo();
//        String s = String.valueOf(stringDemo);
//        System.out.println(s);


//        short a = 100;
//        // a ---> String
//        String s = String.valueOf(a);
//        System.out.println(s);

//        String s = "name=luffy";
//        String[] split = s.split("=");
//        System.out.println(split[0]);
//        System.out.println(split[1]);


//        String s1 = "hello";  // hello字符串已经被加入字符串常量池中了
//        String s2 = s1.intern();
//        // 比较两个变量是不是指向同一个对象？ 引用类型的变量存放的是对象的内存地址 （地址是否相同）
//        // java中的==运算符，如果连接的是引用类型的变量，那么在比较的是对象的内存地址
//        System.out.println(s1==s2);   // true
//
//        String s3 = new String("hello");  // 对象的创建过程（内存视角）
//        System.out.println(s1==s3);  // false
//        String s4 = new String("hello");
//        System.out.println(s3==s4);
//
//        String s5 = "hello";
//        System.out.println(s1==s5);


//        System.out.println(s1);
//        System.out.println(s2);

//        String s1 = "hello world";
//        String s2 = "hello world";
//        System.out.println(s1.contentEquals(s2));
//        System.out.println(s1.contains("abc"));


//        String s1 = "ami";
//        String s2 = "luffy";
//        int i = s1.compareTo(s2);
//        System.out.println(i);


//        String s1 = "a😊销量😜";
//        System.out.println(s);
//        int b = s1.codePointAt(1);
//        System.out.println(b);

//        String s1 = "𪚥";
//        String s1 = "";
//        System.out.println(s1.charAt(1));
//        int i = s1.codePointAt(0);
//        System.out.println(i);

        // int 转换为 String 173733
//        int[] arr = {173733,128522};
//        String s = new String(arr, 0, 2);
//        System.out.println(s);


//        char c = s.charAt(1);
//        System.out.println(c);
//
//        char c1 = s.charAt(3);
//        System.out.println(c1);


        // 如何校验用户输入的手机号格式是否正确呢
//        String phone = "13866668888";
//        String phoneNumberRegex = "^1[3-9]\\d{9}$";
//
//        boolean matches1 = phone.matches(phoneNumberRegex);
//        System.out.println(matches1);

        // 如何判断用户输入的邮箱地址是否合法呢
//        String email = "dong@163.com";
//
//        // 邮箱的正则表达式如何写呢
//        String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
//
//        boolean matches = email.matches(emailRegex);
//        System.out.println(matches);

        // 用户名的长度必须在6-10个字符之间
//        String name = "luff";
//
//        int length = name.length();
//        if (length<6 || length>10){
//            System.out.println("用户名长度非法");
//        }


        // String的构造方法
//        String s = new String();  // 空串
//        String s1 = "";
//        System.out.println(s);
//        System.out.println(s.length());
//        System.out.println(s.equals(""));
//
//        char[] arr = {'H','e','l','l','o'};
//        String s2 = new String(arr);
//        System.out.println(s2);

//        System.out.println(args.length);
//        System.out.println(args[0]);
//        System.out.println(args[1]);
//        System.out.println("hello");

        // 看到了String类实现了 Comparable 接口，会想到什么？
        // (1) 能被Arrays.sort方法进行排序
        // (2) 说明String对象中有个方法叫 compareTo 方法
//        String s = "amily";
//        String s2 = "luffy";
//        int i = s.compareTo(s2);
//        System.out.println(i);

        // 当看到CharSequence中定义了一个叫 lenght的方法时，想到什么
//        int length = s.length();
//        System.out.println(length);

//        char c = s.charAt(1);
//        System.out.println(c);

        // 返回子串 ，注意下标范围 [start,end)
//        CharSequence charSequence = s.subSequence(3, 5);  // 多态
//        System.out.println(charSequence);

//        String s1 = s.toString();
//        System.out.println(s1);



    }
}
